import os
import glob
from datetime import datetime, timedelta

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_DIR = os.path.join(BASE_DIR, "logs")

# 确保日志目录存在
os.makedirs(LOG_DIR, exist_ok=True)

def clean_old_logs(log_prefix: str, days_to_keep: int = 7):
    """清理指定前缀的旧日志文件"""
    try:
        # 获取指定天数前的日期
        seven_days_ago = datetime.now() - timedelta(days=days_to_keep)
        seven_days_ago_str = seven_days_ago.strftime("%Y%m%d")
        
        # 获取所有匹配指定前缀的日志文件
        log_files = glob.glob(os.path.join(LOG_DIR, f"{log_prefix}_*.log"))
        
        # 删除指定天数前的日志文件
        for log_file in log_files:
            # 从文件名中提取日期
            # 假设文件名格式为 log_prefix_YYYYMMDD.log 或 log_prefix_.log.YYYY-MM-DD
            try:
                # 尝试匹配 TimedRotatingFileHandler 生成的文件名格式
                if f"{log_prefix}_.log." in log_file:
                    file_date_str = os.path.basename(log_file).split('.')[-1]
                    file_date = datetime.strptime(file_date_str, "%Y-%m-%d")
                else:
                    # 尝试匹配旧的文件名格式
                    file_date_str = os.path.basename(log_file).split('_')[-1].split('.')[0]
                    file_date = datetime.strptime(file_date_str, "%Y%m%d")

                if file_date < seven_days_ago:
                    try:
                        os.remove(log_file)
                        print(f"已删除旧日志文件: {log_file}")
                    except Exception as e:
                        print(f"删除日志文件失败 {log_file}: {str(e)}")
            except ValueError:
                # 如果文件名不符合预期格式，则跳过
                print(f"跳过不符合命名格式的日志文件: {log_file}")
                continue
    except Exception as e:
        print(f"清理旧日志文件时发生错误: {str(e)}")

if __name__ == "__main__":
    print("开始清理旧日志...")
    clean_old_logs("laixin", 7)
    clean_old_logs("net", 7)
    print("日志清理完成。") 